MSA & EDA


MSA & EDA

MSA

MSA란?

Micro Service Architecture

Microservice란 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크를 이야기 한다.

즉, 하나의 큰 애플리케이션을 여러 개의 다른 역할을 수행하는 애플리케이션으로 분리하였을 때 각 애플리케이션을 의미한다.

마이크로서비스는 하나의 비즈니스 범위에 맞춰 만들어짐

MSA는 언제 필요한가?

모든 애플리케이션이 MSA로 구성될 필요는 없다. MSA는 Monolithic 아키텍처의 문제점을 보완하기 위해 등장했다.

Monolothic

Monolithic 아키텍처란 위의 사진과 같이 모든 코드가 하나의 묶음으로 구성되어있어 간편하고 단순한 아키텍처이다.

로컬 환경에서 개발하기에도 편리하고, 통합 시나리오 테스트를 수행하기에도 손쉬운 구성이다.

그러나 서비스가 지속적으로 성장해 규모가 커질 경우에는 한계에 부딪힌다. 하나의 기능을 추가하기 위해서는 매우 많은 줄의 코드를 수정해야하기 때문이다.

MSA

이럴 경우에 MSA를 이용해 하나의 큰 애플리케이션을 여러 개의 다른 역할을 수행하는 애플리케이션으로 분리할 수 있다.

하나의 DB에 중앙 집중화 하지 않고 서비스 별 별도의 데이터베이스 사용서비스별 독립적 배포가 가능해지기 때문이다. CD도 Monolithic에 비해 가볍게 할 수 있다.

MSA의 장점

MSA의 장점은 서비스가 개별적으로 독립적인 단위의 애플리케이션이기에 변경이 용이하다는 점이다.

서비스 단위로 독립적인 배포가 가능하기에 배포 비용도 기존의 Monolithic 아키텍처보다 훨씬 경제적이다.

MSA의 단점

대표적인 단점으로는 Monolithic 아키텍처에 비해 서비스 간의 통신 관련 처리가 필요하다는 점이다. 이는 응답속도에도 영향을 미친다.

수백개 이상의 마이크로 서비스를 사용할 경우에는 서로 분산되어있기에 관리 포인트가 증가하기 때문이다.

EDA

EDA란?

Event Driven Architecture

분산된 시스템에서 이벤트를 생성(발행)하고 발행된 이벤트를 수신자에게 전송하는 구조로 수신자는 그 이벤트를 처리하는 방식의 아키텍처이다.

즉, 요약하자면 분산 아키텍처 환경에서 이벤트를 생성하고 발행된 이벤트를 수신자에게 전송하는 구조이다.

MSA가 적용된 시스템의 단점을 보완하는 아키텍처라고 생각해도 좋다.

상호 간 결합도를 낮추기 위해 비동기 방식으로 메시지를 전달하는 패턴인데, 비동기 방식을 사용하기에 처리 성능이 향상된다.

특정 서비스에서 다른 서비스가 관심을 가질 수 있는 일부 작업을 수행할 때 해당 서비스는 이벤트- (작업의 기록)를 생성한다.

발행-구독(Pub-Sub) 비동기 통신을 사용히는데, Rest와 달리 요청을 생성하는 서비스는(Publish) 요청을 소비하는 서비스(Subscribe)의 세부 정보(주소, 이벤트 수신 여부)를 알 필요가 없다.

이벤트 게시자는 구독자의 주소를 몰라도 되고 이벤트를 수신했는지 여부를 파악하지 않아도 되는 Non-Blocking 모델이다.

수신자의 서비스가 항상 떠 있지 않아도 게시자는 메시지를 발송할 수 있다.

Message Broker(Kafka, RabbitMQ)와 결합하여 구성되고 MSA 도입 시 발생하는 새로운 요구 사항을 달성할 수 있다.